package com.shortchainsystem.common.minio;

import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.PostConstruct;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;

@Component
public class MinioUtil {
    @Autowired
    private MinioConstants minioConstants;
    public MinioClient minioClient;

    @PostConstruct
    public void init(){
        minioClient = MinioClient.builder()
                .credentials(minioConstants.getAccessKey(), minioConstants.getSecretKey())      // 账号密码
                .endpoint("http://"+minioConstants.getHost()+":"+minioConstants.getPort()+"/")                 // 地址
                .build();
    }


    /**
     *    上传一张图片
     */
    public String uploadFile(String baseUrl, MultipartFile multipartFile){
        try {
            // 获取上传的文件名和文件类型
            String originalFilename = baseUrl + multipartFile.getOriginalFilename();
            String contentType = multipartFile.getContentType();

            // 创建PutObjectArgs对象
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                    .bucket(minioConstants.getBucketName()) // 你的存储桶名称
                    .object(originalFilename) // 上传到MinIO的对象名，通常与文件名相同
                    .contentType(contentType) // 文件类型
                    .stream(multipartFile.getInputStream(), multipartFile.getSize(), -1) // 使用MultipartFile的输入流和大小
                    .build();

            // 上传文件
            minioClient.putObject(putObjectArgs);
            return "http://"+minioConstants.getHost()+":"+minioConstants.getPort()+"/"+minioConstants.getBucketName()+"/"+originalFilename;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
}
